高分求一个<<运算符重载的问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:06:24
#include<iostream.h>
#include<iomanip.h>
class time{

int hour,minute,second;
public:
time(int h_=0,int m_=0,int s_=0){hour=h_;minute=m_;second=s_;}
friend time& operator++(time&);//
friend time& operator++(time&,int);
friend ostream& operator<<(ostream& o,time& t);
};//--------------------
time& operator ++(time& a){
if(!(a.second=(a.second+1)%60)&&!(a.minute=(a.minute+1)%60))
a.hour=(a.hour+1)%24;
return a;
}
time& operator++(time& a,int){
time t(a);
if(!(a.second=(a.second+1)%60)&&!(a.minute=(a.minute+1)%60))
a.hour=(a.hour+1)%24;
return a;}
ostream& operator<<(ostream& o,const time& t){ //必须有const??
return o<<setfill('0')<<setw(2)<<t.hour<<":"<<setw(2)<<t.minute<<":"<<setw(2)<<t.second<<"\n"<<setfill(' ');}

//---

楼上的方法显然不是解决根本问题的方法.

我想说的是第一: 使用标准库往往是最有效且最不容易出错的习惯.
二: 我想你一定用的是VC++6.0, 因为无论什么编译器我都还没遇见过像6.0这样很傻瓜的编译问题,基本上涉及到类继承和友元的就没有不出现问题的时候. 建议使用VS2005或者2008. 我也已经在VS2008下将你的程序编译通过了(有个小问题,输出操作符的声明和定义不一样,多了个const)
三: 定义接口是访问私有数据最有效的方法

如果你使用的编译器是VC 6.0,应该这样改一下,VC 6.0对友元的支持存放bug。
#include<iostream.h>
#include<iomanip.h>
////////////////////////////////
class time;
time& operator++(time&);//
time& operator++(time&,int);
ostream& operator<<(ostream& o,const time& t); // 注意const
/////////////////////////////////
class time
{

int hour,minute,second;
public:
time(int h_=0,int m_=0,int s_=0){hour=h_;minute=m_;second=s_;}
friend time& operator++(time&);//
friend time& operator++(time&,int);
friend ostream& operator<<(ostream& o,const time& t);
};//----

#include<iostream>
#include<iomanip>

using namespace std;
class time